[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事では、Scala 3で廃止されるクラスシャドウイング(Class Shadowing)について解説します。
クラスシャドウイングは廃止される
Scalaではこれまでこのようなパターンが許されていました。
class Q { class P { val x = "" } } class R extends Q { class P { val x = 4 } }
Dottyではこれはコンパイルエラーとなります。
何が問題だったのか
Scalaのクラスはオーバーライドできません。
しかし、サンプルコードにおいては見た目にはR
に定義されたP
がQ
に定義されているP
をオーバーライドしているように見えます。
実はオーバーライドしているわけではなく、ただ別のクラスが定義されている(上書きされている)だけなのです。
問題への対応
Dottyでは、既存の内部クラスと同名のクラスを定義できなくなりました。
これにより紛らわしいコードが生まれなくなります。
既存のコードへの影響
Scala本体、あるいは関連するライブラリにおいて、この機能はほとんど使われていませんでした。
つまり、Scala 3への移行に及ぼす影響は限定的でした。
ほかのコードでも同様と推測されます。
移行は3.0にアップデートしてからでOK
クラスシャドウイングはScala 2.13.2にて既に非推奨となっています。
そして、3.0では使用することができなくなりました。
移行オプション3.0-migration
を設定しても使用することはできません。
したがって、Scala 3.0へのアップデートの前に、クラスシャドウイングをしている箇所を修正する必要があります。
Dotty公式ドキュメントには3.0-migration
で有効化できると書いてありますが、これは実際にはそのような挙動はしないので、矛盾しています。
外部リンク:Dropped: Class Shadowing
サイト内検索
カテゴリ「Scala 3で廃止予定の機能」の記事
弱適合:Scala 3で廃止予定の機能(13)
DelayedInitの解説:Scala 3で廃止予定の機能(1)
[this]修飾子:Scala 3で廃止予定の機能(12)
Scala 3で変更・廃止予定の機能と移行作業についてのまとめ
シンボルリテラルの解説:Scala 3で廃止予定の機能(3)
自動適用:Scala 3で廃止予定の機能(14)
forSomeによる存在型:Scala 3で廃止予定の機能(6)
型射影:Scala 3で廃止予定の機能(7)
手続き型構文:Scala 3で廃止予定の機能(8)
先行初期化:Scala 3で廃止予定の機能(9)
do-while文の解説:Scala 3で廃止予定の機能(4)
Scala 2のマクロ:Scala 3で廃止予定の機能(5)
クラスシャドウイング:Scala 3で廃止予定の機能(10)
XMLリテラルの解説:Scala 3で廃止予定の機能(2)
大域脱出:Scala 3で廃止予定の機能(11)
カテゴリ「Scala 3で廃止予定の機能」の記事
弱適合:Scala 3で廃止予定の機能(13)
DelayedInitの解説:Scala 3で廃止予定の機能(1)
[this]修飾子:Scala 3で廃止予定の機能(12)
Scala 3で変更・廃止予定の機能と移行作業についてのまとめ
シンボルリテラルの解説:Scala 3で廃止予定の機能(3)
自動適用:Scala 3で廃止予定の機能(14)
forSomeによる存在型:Scala 3で廃止予定の機能(6)
型射影:Scala 3で廃止予定の機能(7)
手続き型構文:Scala 3で廃止予定の機能(8)
先行初期化:Scala 3で廃止予定の機能(9)
do-while文の解説:Scala 3で廃止予定の機能(4)
Scala 2のマクロ:Scala 3で廃止予定の機能(5)
クラスシャドウイング:Scala 3で廃止予定の機能(10)
XMLリテラルの解説:Scala 3で廃止予定の機能(2)
大域脱出:Scala 3で廃止予定の機能(11)